#pragma once

#include <string>
#include <algorithm>

namespace zhiang {
std::string number_to_letter(int x) {
    if (x <= 0) {
        return "";
    }
    std::string result;
    while (x > 0) {
        x--; // 因为是从1开始而不是0开始
        int remainder = x % 26;
        result.push_back('A' + remainder);
        x /= 26;
    }
    std::reverse(result.begin(), result.end()); // 由于我们是从低位到高位构建的，需要反转字符串
    return result;
}

int letter_to_number(const std::string& s) {
    if (s.empty()) {
        return 0;
    }
    int result = 0;
    for (char c : s) {
        if (c < 'A' || c > 'Z') {
            return 0; // 无效字符
        }
        // 每次将当前结果乘以26，然后加上新的数字
        result = result * 26 + (c - 'A' + 1);
    }
    return result;
}

}
